package wh.threadlocal;

/**
 * @author: wh(1835734390 @ qq.com)
 * @date: 2022/4/27 9:35
 * @description:第三种情况：有1000个任务，我们利用线程池去处理
 * @version:
 */

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadLocalNormalUsage02 {

    public String date(int seconds) {
        //seconds单位是秒，而Date()的参数要求是毫秒；所这儿乘1000了；
        //【这个返回的日期】=【1970.1.1 00:00:00】+【1000*seconds】；（PS：如果在东八区的话，就是【1970.1.1 08:00:00】）
        Date date = new Date(1000 * seconds);
        //定义时间显示格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return dateFormat.format(date);
    }

    //创建一个线程池
    public static ExecutorService threadPool = Executors.newFixedThreadPool(10);

    //（1）但是，这儿有个缺点：这1000任务，我们每个任务都要调用一次date()方法；而每次调用date()方
    // 法，都会创建一个SimpleDateFormat对象；所以，为了完成1000次任务，我们需要创建1000
    // 个SimpleDateFormat对象；即SimpleDateFormat我们要创建、销毁1000次；
    //（2）由此，就想到：既然每个任务都需要用到SimpleDateFormat对象，那么为什么不只创建一次SimpleDateFormat对
    // 象，然后这1000次任务，都使用同一个SimpleDateFormat对象，不好吗？
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i <1000 ; i++) {
            int finalI = i;
            //然后，把任务放到线程池中；
            threadPool.submit(new Thread(new Runnable() {
                @Override
                public void run() {
                    String date = new ThreadLocalNormalUsage02().date(finalI);
                    System.out.println(date);
                }
            }));
        }
        threadPool.shutdown();//最后，记得把线程池给关闭
    }
}